home *** CD-ROM | disk | FTP | other *** search
/ IRIX Development Foundation 1.1 for IRIX 6.4 / SGI IRIX 6.4 Development Foundation 1.1.iso / relnotes / c++_dev / ch1.z / ch1
Text File  |  1998-03-26  |  77KB  |  2,313 lines

  1.  
  2.  
  3.  
  4.                                      - 1 -
  5.  
  6.  
  7.  
  8.           7.2.1 C++ Release Notes
  9.  
  10.  
  11.  
  12.  
  13.  
  14.  
  15.  
  16.  
  17.  
  18.  
  19.  
  20.  
  21.  
  22.  
  23.  
  24.  
  25.  
  26.  
  27.  
  28.  
  29.  
  30.  
  31.  
  32.  
  33.  
  34.  
  35.  
  36.  
  37.  
  38.  
  39.  
  40.  
  41.  
  42.           DDDDooooccccuuuummmmeeeennnntttt NNNNuuuummmmbbbbeeeerrrr 000000007777....2222666600006666----000011110000
  43.  
  44.  
  45.  
  46.  
  47.  
  48.  
  49.  
  50.  
  51.  
  52.  
  53.  
  54.  
  55.  
  56.  
  57.  
  58.  
  59.  
  60.  
  61.  
  62.  
  63.  
  64.  
  65.  
  66.                                      - 2 -
  67.  
  68.  
  69.  
  70.           1.  _I_n_t_r_o_d_u_c_t_i_o_n
  71.  
  72.           The Silicon Graphics C++ Compiler is an environment for
  73.           compiling programs written in the C++ programming language.
  74.           This environment allows access to standard IRIX features and
  75.           to the Graphics Library.
  76.  
  77.           The MIPSpro 7.2.1  release of the compiler is a native C++
  78.           compiler based on a frontend from the Edison Design Group.
  79.  
  80.           The latest set of compilers, invoked when -n32, -64, -mips3
  81.           or -mips4 is specified on the command-line, is based on the
  82.           n32/64 ABI, introduced with the 6.2 compilers.
  83.  
  84.           For backwards compatibility, the older ucode-based compilers
  85.           are also bundled with this release; these can be invoked
  86.           with -32,  -mips1, or -mips2.
  87.  
  88.           Note that the n32/64 compilers have been available for over
  89.           a year and we strongly recommend that you use these. Note
  90.           also that these n32/64 compilers closely reflect the C++
  91.           draft in terms of the language accepted and also provide the
  92.           features and performance enhancements described in detail
  93.           subsequently in these release notes.  There will be no
  94.           further development work on the ucode-based compilers.
  95.  
  96.  
  97.           The n32 and 64-bit versions are based on release 2.34 of the
  98.           Edison frontend.
  99.  
  100.           The 32-bit version is based on release 2.29 of the Edison
  101.           frontend.
  102.  
  103.           The old frontend based on release 3.0.1 of the USL C++
  104.           Translator (_c_f_r_o_n_t), is also available by specifying the
  105.           options -_3_2 -_u_s_e__c_f_r_o_n_t. Note that the use of this option is
  106.           being deprecated and the _c_f_r_o_n_t compiler will no longer be
  107.           supported in future releases.
  108.  
  109.  
  110.           1.1  _I_n_s_t_a_l_l_a_t_i_o_n__I_n_f_o_r_m_a_t_i_o_n
  111.  
  112.           This section lists supplemental information to the _I_R_I_S
  113.           _S_o_f_t_w_a_r_e _I_n_s_t_a_l_l_a_t_i_o_n _G_u_i_d_e.  The information listed here is
  114.           product-specific; use it with the installation guide to
  115.           install this product.
  116.  
  117.           _N_O_T_E:  Starting with the 7.2 release, the C++ compiler
  118.           front-ends are packaged in their own subsystem on a separate
  119.           CD. For proper installation, you must install _c_o_m_p_i_l_e_r__d_e_v,
  120.           _c_o_m_p_i_l_e_r__e_o_e, _c++__e_o_e and _c++__d_e_v from the IRIX Development
  121.  
  122.  
  123.  
  124.  
  125.  
  126.  
  127.  
  128.  
  129.  
  130.  
  131.  
  132.                                      - 3 -
  133.  
  134.  
  135.  
  136.           Foundation CD, as well as _c++__f_e from the MIPSpro C++
  137.           Compiler CD.
  138.  
  139.           The runtime libraries (DSOs) in the compiler_eoe and c++_eoe
  140.           subsystems are identical to what was shipped on the
  141.           corresponding IRIX releases and are provided as a
  142.           convenience. However, the subsystems will appear as upgrades
  143.           under inst, because changes have been made to certain non-
  144.           runtime library files.
  145.  
  146.           If, however, you need the latest runtime library fixes you
  147.           must install the subsystems from patches 2416 (compiler_eoe)
  148.           and 2758 (c++_eoe) on top of this image.
  149.  
  150.  
  151.           _c++__f_e (On MIPSpro C++ CD) contains:
  152.  
  153.              +o _f_e_c_c, the 64-bit and n32 C++ compiler frontend.
  154.  
  155.              +o _e_d_g_c_p_f_e, the 32-bit C++ compiler frontend.
  156.  
  157.              +o _e_d_g_c_p_f_e._e_h, the 32-bit C++ compiler frontend with
  158.                support for exception handling.
  159.  
  160.              +o Online manual page for _C_C(1).
  161.  
  162.  
  163.           _c++__d_e_v (On IRIX Development Foundation) contains:
  164.  
  165.              +o _C_C, the C++ compiler driver (not to be confused with
  166.                _c_c).
  167.  
  168.              +o The utilities _e_d_g__p_r_e_l_i_n_k, _c++_p_a_t_c_h and _c++_f_i_l_t.
  169.  
  170.              +o For users wishing to use the old frontend, _c_f_r_o_n_t, a
  171.                language translator for C++-to-C translation, and the
  172.                utilities _m_a_r_k_c++, _p_t_c_o_m_p, and _p_t_l_i_n_k. (_N_O_T_E: tttthhhheeee
  173.                ccccffffrrrroooonnnntttt----bbbbaaaasssseeeedddd ccccoooommmmppppiiiillllaaaattttiiiioooonnnn ssssyyyysssstttteeeemmmm iiiissss oooobbbbssssoooolllleeeesssscccceeeennnntttt,,,, aaaannnndddd
  174.                wwwwiiiillllllll bbbbeeee rrrreeeemmmmoooovvvveeeedddd iiiinnnn aaaa ffffuuuuttttuuuurrrreeee rrrreeeelllleeeeaaaasssseeee).
  175.  
  176.              +o The libraries _l_i_b_c_o_m_p_l_e_x._a, and _l_i_b_m_a_n_g_l_e._a.
  177.  
  178.              +o Include files specific to C++.
  179.  
  180.              +o These release notes.
  181.  
  182.              +o _C++ _P_r_o_g_r_a_m_m_e_r'_s _G_u_i_d_e, which includes the hard-copy
  183.                _C_C(1) manual page.
  184.  
  185.  
  186.  
  187.  
  188.  
  189.  
  190.  
  191.  
  192.  
  193.  
  194.  
  195.  
  196.  
  197.  
  198.                                      - 4 -
  199.  
  200.  
  201.  
  202.           The 32-bit C++ libraries /_u_s_r/_l_i_b/_l_i_b_C._s_o and
  203.           /_u_s_r/_l_i_b/_l_i_b_C_s_u_p._s_o are installed in the subsystem
  204.           _c++__e_o_e._s_w._l_i_b.  This allows application libraries written
  205.           in C++ to be used on systems that do not have C++ installed.
  206.           Note that these libraries are dynamic shared objects and not
  207.           an archive.  There are also   non-shared archive form of the
  208.           libraries, /_u_s_r/_l_i_b/_n_o_n_s_h_a_r_e_d/_l_i_b_C._a, and
  209.           /_u_s_r/_l_i_b/_n_o_n_s_h_a_r_e_d/_l_i_b_C_s_u_p._a.
  210.  
  211.           Note: The 64-bit and n32 versions of these libraries are
  212.              available in /_u_s_r/_l_i_b_6_4/ and /_u_s_r/_l_i_b_3_2/ directories
  213.              respectively.
  214.  
  215.              Note:  Packaged with this software is a separate sheet
  216.                     that contains the Software License Agreement.
  217.                     This software is provided to you solely under the
  218.                     terms and conditions of the Software License
  219.                     Agreement.  Please take a few moments to review
  220.                     the Agreement.
  221.  
  222.  
  223.           1.2  _R_e_l_e_a_s_e__I_d_e_n_t_i_f_i_c_a_t_i_o_n__I_n_f_o_r_m_a_t_i_o_n_
  224.  
  225.           Following is the release identification information for the
  226.           7.2.1 C++ Compiler.
  227.  
  228.                                     C++ Compiler
  229.           SSSSooooffffttttwwwwaaaarrrreeee OOOOppppttttiiiioooonnnn PPPPrrrroooodddduuuucccctttt
  230.                                     7.2.1
  231.           VVVVeeeerrrrssssiiiioooonnnn
  232.                                     SC4-C++-7.2.1
  233.           PPPPrrrroooodddduuuucccctttt CCCCooooddddeeee
  234.                                     IRIX 6.2 (or higher)
  235.                                     IRIX Development
  236.                                     Foundation 1.1
  237.           SSSSooooffffttttwwwwaaaarrrreeee RRRReeeeqqqquuuuiiiirrrreeeemmmmeeeennnnttttssss
  238.  
  239.  
  240.  
  241.  
  242.  
  243.           1.3  _O_n_l_i_n_e__R_e_l_e_a_s_e__N_o_t_e_s
  244.  
  245.           After you install the online documentation for a product
  246.           (the _r_e_l_n_o_t_e_s subsystem), you can view the release notes on
  247.           your screen.
  248.  
  249.           If you have a graphics system, select ``Release Notes'' from
  250.           the Tools submenu of the Toolchest. This displays the
  251.           _g_r_e_l_n_o_t_e_s(1) graphical browser for the online release notes.
  252.           Refer to the _g_r_e_l_n_o_t_e_s(1) man page for information on
  253.           options to this command.
  254.  
  255.           If you do not have a graphics system, you can use the
  256.           _r_e_l_n_o_t_e_s command.  Refer to the _r_e_l_n_o_t_e_s(1) man page for
  257.           accessing the online release notes.
  258.  
  259.  
  260.  
  261.  
  262.  
  263.  
  264.  
  265.  
  266.  
  267.                                      - 5 -
  268.  
  269.  
  270.  
  271.           1.4  _P_r_o_d_u_c_t__S_u_p_p_o_r_t
  272.  
  273.           Silicon Graphics, Inc., provides a comprehensive product
  274.           support and maintenance program for its products.
  275.  
  276.           If you are in the U.S. or Canada and would like support for
  277.           your Silicon Graphics-supported products, contact the
  278.           Technical Assistance Center at 1-800-800-4SGI.
  279.  
  280.           If you are outside the U.S. or Canada, contact the Silicon
  281.           Graphics subsidiary or authorized distributor in your
  282.           country.
  283.  
  284.           1.5  _C_+_+__C_o_m_p_i_l_e_r__S_u_b_s_y_s_t_e_m_s
  285.  
  286.           Following is a description of the C++ Compiler subsystems:
  287.  
  288.           _c++__d_e_v._s_w._c++                The C++ driver and associated
  289.                                         tools
  290.  
  291.           _c++__d_e_v._s_w._l_i_b                C++ demangling and complex
  292.                                         32-bit libraries
  293.  
  294.           _c++__d_e_v._s_w._l_i_b_r_w              Rogue Wave (TM) Tools.h++ (TM)
  295.                                         32-bit library
  296.  
  297.           _c++__d_e_v._s_w._l_i_b_n_s              Non_shared C++ 32-bit runtime
  298.                                         library
  299.  
  300.           _c++__d_e_v._s_w_3_2._l_i_b              C++ N32 demangling and complex
  301.                                         libraries
  302.  
  303.           _c++__d_e_v._s_w_3_2._l_i_b_r_w            Rogue Wave (TM) Tools.h++ (TM)
  304.                                         N32-bit library
  305.  
  306.           _c++__d_e_v._s_w_6_4._l_i_b              C++ 64-bit demangling and
  307.                                         complex libraries
  308.  
  309.           _c++__d_e_v._s_w_6_4._l_i_b_r_w            Rogue Wave (TM) Tools.h++ (TM)
  310.                                         64-bit library
  311.  
  312.           _c++__d_e_v._h_d_r._l_i_b               Standard C++ header files
  313.  
  314.           _c++__d_e_v._h_d_r._l_i_b_r_w             Rogue Wave (TM) Tools.h++ (TM)
  315.                                         library header files
  316.  
  317.           _c++__d_e_v._m_a_n._c++               Man pages for C++ and the
  318.                                         standard C++ header files
  319.  
  320.           _c++__d_e_v._m_a_n._l_i_b_r_w             Man pages for the Rogue Wave
  321.                                         (TM) Tools.h++ (TM) library
  322.  
  323.  
  324.  
  325.  
  326.  
  327.  
  328.  
  329.  
  330.  
  331.  
  332.  
  333.                                      - 6 -
  334.  
  335.  
  336.  
  337.           _c++__d_e_v._m_a_n._r_e_l_n_o_t_e_s          These release notes
  338.  
  339.           _c++__d_e_v._b_o_o_k_s._c++__P_G          C++ Language System
  340.                                         Programmer's Guide
  341.  
  342.  
  343.           1.6  _L_i_c_e_n_s_i_n_g__I_n_f_o_r_m_a_t_i_o_n
  344.  
  345.  
  346.  
  347.           1.6.1  _I_n_t_r_o_d_u_c_t_i_o_n
  348.  
  349.  
  350.           Your copy of the MIPSpro C++ Compiler requires a software
  351.           license in order to operate.  This section defines some
  352.           important software licensing terms, describes the basic
  353.           procedure for obtaining, installing, and testing a software
  354.           license for MIPSpro C++ Compiler, and lists a web site,
  355.           addresses, and phone numbers that you can use to contact
  356.           Silicon Graphics License Administration.
  357.  
  358.           For more information about installing and troubleshooting
  359.           software licenses you can look in the CD liner notes or
  360.           visit the web page:
  361.           http://www.sgi.com/Support/Licensing/install_docs.html or
  362.           Silicon Graphics' licensing website:
  363.           http://www.sgi.com/Products/license.html
  364.  
  365.           For in depth detail on FLEXlm licensing, see the FLEXlm
  366.           User's Guide, which covers using and administering FLEXlm
  367.           software licenses. The FLEXlm User's Guide, is included in
  368.           the system software documentation; the online InSight
  369.           version is in the subsystem license_eoe.books.FlexLM_UG
  370.           which is on the IRIX Development Foundation CD.
  371.  
  372.           Your purchased software is delivered with a label that
  373.           includes a temporary license and an Entitlement ID.  The
  374.           temporary license allows you to use the software until you
  375.           obtain your permanent license. However, your entitlement ID
  376.           number makes it possible to obtain your permanent license
  377.           instantly through Silicon Graphics' licensing website or
  378.           email autobot. For WEB site and email address see
  379.           "Contacting Silicon Graphics License Administration" at the
  380.           end of this chapter of the release notes.
  381.  
  382.  
  383.  
  384.  
  385.  
  386.  
  387.  
  388.  
  389.  
  390.  
  391.  
  392.  
  393.  
  394.  
  395.  
  396.  
  397.  
  398.  
  399.                                      - 7 -
  400.  
  401.  
  402.  
  403.           1.6.2  _A__F_e_w__D_e_f_i_n_i_t_i_o_n_s
  404.  
  405.  
  406.           A software license is a collection of information that,
  407.           after installation, allows you to use a licensed software
  408.           product on one or more systems.
  409.  
  410.           The software license information includes the license type,
  411.           the license expiration date, a license password, a system ID
  412.           number (/etc/sysinfo -s), and additional information
  413.           concerning the license and licensed software.  Floating
  414.           licenses have the host name (/sbin/uname -n) as part of the
  415.           license.
  416.  
  417.           There are two types of software licenses, node-locked and
  418.           floating:
  419.  
  420.  
  421.           1.6.2.1  _n_o_d_e_-_l_o_c_k_e_d
  422.  
  423.  
  424.           A node-locked license is installed on a particular system
  425.           (node) and allows the licensed software to run on that
  426.           system.
  427.  
  428.           For this release there are four different types of
  429.           nodelocked licenses each corresponding to a different
  430.           product pricing tier.
  431.  
  432.              +o The first tier allows you to run MIPSpro C++ on a
  433.                system of two or less processors.  It contains "CPU 2"
  434.                in its VENDOR STRING field.
  435.  
  436.              +o The second tier allows you to run MIPSpro C++ on a
  437.                system of eight or less processors.  It contains "CPU
  438.                8" in its VENDOR STRING field.
  439.  
  440.              +o The third tier allows you to run MIPSpro C++ on a
  441.                system of 32 or less processors.  It contains "CPU 32"
  442.                in its VENDOR STRING field.
  443.  
  444.              +o The fourth tier allows you to run MIPSpro C++ on a
  445.                system of any number of processors.  It does not
  446.                contain a VENDOR STRING field.
  447.  
  448.  
  449.  
  450.  
  451.  
  452.  
  453.  
  454.  
  455.  
  456.  
  457.  
  458.  
  459.  
  460.  
  461.  
  462.  
  463.  
  464.  
  465.                                      - 8 -
  466.  
  467.  
  468.  
  469.           1.6.2.2  _f_l_o_a_t_i_n_g
  470.  
  471.  
  472.           A floating license allows the licensed software to run on
  473.           one or more systems in the network simultaneously. The
  474.           number of systems (nodes) allowed is included in the
  475.           software license information.
  476.  
  477.           When an application requires a license from a license
  478.           server, the floating license points the client to the
  479.           license server (server name and license file path are
  480.           included with the license and copied on all client systems).
  481.           The FLEXlm license daemon, lmgrd, is responsible for
  482.           checking out/in licenses (tokens) to/from client systems. As
  483.           long as the number of licenses checked out to clients at a
  484.           given time is less than the encrypted maximum number of
  485.           concurrent users no user is denied access. Once the maximum
  486.           number is reached, the next request for a license will be
  487.           denied.
  488.  
  489.           Floating licenses have the advantage of cost, since a
  490.           license can be shared over many infrequent users, but they
  491.           are harder to install and administer. Floating license
  492.           check-out times can also vary depending on the load of the
  493.           network and the time needed to reach the license server.
  494.  
  495.  
  496.  
  497.           1.6.2.3  _E_n_t_i_t_l_e_m_e_n_t__I_D
  498.  
  499.  
  500.           The Entitlement ID is a 15 digit number (shipped with the
  501.           software) which allows your permanent license request to be
  502.           processed and approved in seconds.
  503.  
  504.  
  505.           1.6.3  _O_b_t_a_i_n_i_n_g__a_n_d__I_n_s_t_a_l_l_i_n_g__a__S_o_f_t_w_a_r_e__L_i_c_e_n_s_e
  506.  
  507.  
  508.           This section explains the procedure for obtaining and
  509.           installing a software license:
  510.  
  511.  
  512.           1.6.3.1  _M_a_k_e _c_e_r_t_a_i_n _y_o_u _h_a_v_e _y_o_u_r _s_o_f_t_w_a_r_e _l_i_c_e_n_s_e
  513.                    _i_n_f_o_r_m_a_t_i_o_n
  514.  
  515.  
  516.           Software license information is distributed in several ways:
  517.           by WEB page, email, FAX, postal mail, or on sheets of paper
  518.           included with the product.
  519.  
  520.  
  521.  
  522.  
  523.  
  524.  
  525.  
  526.  
  527.  
  528.  
  529.  
  530.  
  531.                                      - 9 -
  532.  
  533.  
  534.  
  535.           If you are updating to this release of MIPSpro C++ Compiler
  536.           from an older release you need to obtain and install a new
  537.           license.
  538.  
  539.           If you have received both a temporary license and a
  540.           permanent software license, install the permanent license;
  541.           do not install the temporary license.
  542.  
  543.  
  544.           1.6.3.2  _I_d_e_n_t_i_f_y _t_h_e _s_y_s_t_e_m _o_n _w_h_i_c_h _y_o_u _w_i_l_l _i_n_s_t_a_l_l _t_h_e
  545.                    _s_o_f_t_w_a_r_e _l_i_c_e_n_s_e.
  546.  
  547.  
  548.           Because software license information usually must be
  549.           installed on a particular system, follow these guidelines:
  550.  
  551.           If the System ID field says ``ANY,'' then you can install
  552.           the license on any system you choose.
  553.  
  554.           Install a license on the machine which has a system ID (
  555.           /etc/sysinfo -s ) which matches the system ID in the
  556.           license.
  557.  
  558.  
  559.           1.6.3.3  _I_n_s_t_a_l_l _t_h_e _s_o_f_t_w_a_r_e _l_i_c_e_n_s_e (_t_e_m_p_o_r_a_r_y _o_r
  560.                    _p_e_r_m_a_n_e_n_t).
  561.  
  562.  
  563.           Licenses typically come with complete license installation
  564.           instructions.  Follow these instructions to install the
  565.           license. For more detailed license installation and trouble
  566.           shooting information see the web page:
  567.           http://www.sgi.com/Support/Licensing/install_docs.html
  568.  
  569.           Check the ``license type'' listed in the software license
  570.           information to find out whether the license is a node-locked
  571.           license or a floating license.  The installation procedure
  572.           depends on the license type:
  573.  
  574.           You can install the license "manually" or use the
  575.           LicenseManager(1M) tool.  You can bring up LicenseManager by
  576.           choosing ``License Manager'' from the System toolchest.
  577.  
  578.           If the license is a floating license, you may need to
  579.           configure the system on which you plan to install the
  580.           license as a license server.
  581.  
  582.  
  583.  
  584.  
  585.  
  586.  
  587.  
  588.  
  589.  
  590.  
  591.  
  592.  
  593.  
  594.  
  595.  
  596.  
  597.                                      - 10 -
  598.  
  599.  
  600.  
  601.           1.6.3.4  _V_e_r_i_f_y _t_h_a_t _t_h_e _s_o_f_t_w_a_r_e _l_i_c_e_n_s_e _h_a_s _b_e_e_n
  602.                    _s_u_c_c_e_s_s_f_u_l_l_y _i_n_s_t_a_l_l_e_d.
  603.  
  604.  
  605.           To verify that the software license is working, try running
  606.           the MIPSpro C++ Compiler. The licensed program in this
  607.           product is: CC(1). The FEATURE NAME in the license of this
  608.           product appears as cpp.
  609.  
  610.           For this release, C++ compilations will not be terminated if
  611.           the license is absent or incorrectly installed.  However, a
  612.           warning  message similar to the following will be displayed:
  613.  
  614.  
  615.           %CC -c foo.cpp
  616.           Cannot find license file (-1,73:2) No such file or directory
  617.  
  618.            The MIPSpro C++ Compiler
  619.            (license FEATURE string = cpp)
  620.            requires a license password.
  621.  
  622.            For license installation and trouble shooting
  623.            information visit the web page:
  624.  
  625.                    http://www.sgi.com/Support/Licensing/install_docs.html
  626.  
  627.            To obtain a Permanent license (proof of purchase
  628.            required) or an Evaluation license please
  629.            visit our license request web page:
  630.  
  631.                    http://www.sgi.com/Products/license.html
  632.  
  633.                    or send a blank email message to:
  634.  
  635.                    license@sgi.com
  636.  
  637.            In North America, Silicon Graphics' customers may request
  638.            Permanent licenses by sending a facsimile to:
  639.  
  640.                    (650) 932-0537
  641.  
  642.                    or by calling our technical support hotline
  643.  
  644.                    1-800-800-4SGI
  645.  
  646.            If you are Outside of North America or you are not a Silicon
  647.            Graphics support customer then contact your local support provider.
  648.  
  649.  
  650.  
  651.  
  652.  
  653.  
  654.  
  655.  
  656.  
  657.  
  658.  
  659.  
  660.  
  661.  
  662.  
  663.                                      - 11 -
  664.  
  665.  
  666.  
  667.           1.6.4  _C_o_n_t_a_c_t_i_n_g__S_i_l_i_c_o_n__G_r_a_p_h_i_c_s__L_i_c_e_n_s_e__A_d_m_i_n_i_s_t_r_a_t_i_o_n
  668.  
  669.  
  670.           If you are connected to the internet then you can request a
  671.           permanent license from any country in the world using either
  672.           of the following methods:
  673.  
  674.  
  675.              * WEB: Go the the web site:
  676.                http://www.sgi.com/Products/license.html
  677.                Look under the "License Request" section.
  678.  
  679.              * email: Send a blank email message to
  680.                license@sgi.com
  681.                You will be sent back a blank email license
  682.                request template with full instructions.
  683.  
  684.  
  685.           If are not connected to the internet and need to obtain a
  686.           software license, fill out the Software License Registration
  687.           sheet that was included inside the CD liner notes with the
  688.           software (or the replica in the Network License System
  689.           Administration Guide). Send or FAX the filled out Software
  690.           License Registration sheet to Silicon Graphics License
  691.           Administration or your local service provider. After your
  692.           request is received by Silicon Graphics or your local
  693.           service provider, you should receive a software license
  694.           within two business days.
  695.  
  696.           In the United States and Canada, Silicon Graphics License
  697.           Administration provides software license information to
  698.           Silicon Graphics customers. You can contact Silicon Graphics
  699.           License Administration in these ways:
  700.  
  701.  
  702.              * FAX: (650) 932-0537
  703.              * Mail:
  704.  
  705.                Software Licensing M/S 134
  706.                Silicon Graphics, Inc.
  707.                P.O. Box 7311
  708.                Mountain View, CA 94039-9600
  709.  
  710.  
  711.           In an emergency, you can telephone Silicon Graphics at (800)
  712.           800-4744.  If you are not in the United States or Canada, or
  713.           if you purchased the system or software from a vendor other
  714.           than Silicon Graphics, please contact your local service
  715.           provider.
  716.  
  717.  
  718.  
  719.  
  720.  
  721.  
  722.  
  723.  
  724.  
  725.  
  726.  
  727.  
  728.  
  729.                                      - 12 -
  730.  
  731.  
  732.  
  733.           1.7  _I_n_s_t_a_l_l_a_t_i_o_n__M_e_t_h_o_d
  734.  
  735.           All of the subsystems for the C++ Compiler can be installed
  736.           using _i_n_s_t from IRIX.
  737.  
  738.           For the details of this procedure, consult the _1._1 _I_R_I_X
  739.           _D_e_v_e_l_o_p_m_e_n_t _F_o_u_n_d_a_t_i_o_n release notes.
  740.  
  741.  
  742.           1.8  _N_e_w__F_e_a_t_u_r_e_s__i_n__M_I_P_S_p_r_o__7_._2_._1
  743.  
  744.  
  745.           The following set of new features have been added in the
  746.           MIPSpro 7.2.1 release.
  747.  
  748.  
  749.           1.8.1  _S_t_a_n_d_a_r_d__C_o_n_f_o_r_m_i_n_g__L_i_b_r_a_r_i_e_s
  750.  
  751.  
  752.           Names in the standard library are now in namespace std.
  753.           Standard header files can now be included without the
  754.           trailing .h (although the old convention also works).  For
  755.           Example:
  756.  
  757.  
  758.           Old Way (still works)           New Way (ANSI)
  759.           #include <vector.h>             #include <vector>
  760.                                           using std::vector;
  761.           vector<int> my_vector;          vector<int> my_vector;
  762.  
  763.  
  764.  
  765.  
  766.           1.8.2  _S_u_p_p_o_r_t__f_o_r__s_t_r_i_n_g__c_l_a_s_s
  767.  
  768.  
  769.           MIPSpro 7.2.1 C++ provides support for the string class in
  770.           conformance with the ANSI standard. For example:
  771.  
  772.           #include <string>
  773.           std::string my_string;      // string of chars
  774.           std::wstring my_string;     // string of wchar_t
  775.           std::basic_string<int> my_intstring; // string of user
  776.                                                // specified type
  777.  
  778.  
  779.           Better performance is however, still available through the
  780.           use of the rope class.
  781.  
  782.  
  783.  
  784.  
  785.  
  786.  
  787.  
  788.  
  789.  
  790.  
  791.  
  792.  
  793.  
  794.  
  795.                                      - 13 -
  796.  
  797.  
  798.  
  799.           1.8.3  _N_e_w__F_l_a_g_s__f_o_r__c_o_m_p_i_l_i_n_g__w_i_t_h__p_r_e_c_o_m_p_i_l_e_d__h_e_a_d_e_r_s
  800.  
  801.           Several new options in the -LANG option group to control
  802.           compiling with precompiled headers.These options are:
  803.  
  804.              +o -LANG:pch=ON|OFF
  805.  
  806.                Precompiled header files contain a snapshot of all the
  807.                code preceding the "header stop" point, which is
  808.                generally the first token in the primary source file
  809.                that does not belong to a preprocessing directive. Use
  810.                of precompiled headers might speed up compilation in
  811.                certain cases. For details on precompiled header files,
  812.                see chapter 2 of _M_I_P_S_p_r_o _C_o_m_p_i_l_i_n_g _a_n_d _P_e_r_f_o_r_m_a_n_c_e
  813.                _T_u_n_i_n_g _G_u_i_d_e.  This option automatically uses or
  814.                creates a precompiled header file. This option cannot
  815.                be used with -LANG:use_pch or -LANG:create_pch.
  816.  
  817.              +o -LANG:create_pch=filename
  818.  
  819.                Create a precompiled header with the specified name.
  820.                This option cannot be used with -LANG:pch or
  821.                -LANG:use_pch.
  822.  
  823.              +o -LANG:use_pch=filename
  824.  
  825.                Use a precompiled header specified by file-name, if it
  826.                is valid for this compilation unit.  The compilation
  827.                will proceed with a warning if the pch file cannot be
  828.                used. This option cannot be used with -LANG:pch or
  829.                -LANG:create_pch.
  830.  
  831.              +o -LANG:pch_dir=directory-name
  832.  
  833.                The directory in which to search for and/or create a
  834.                precompiled header file. This option may be used with
  835.                -LANG:pch -LANG:create_pch and -LANG:use_pch. When used
  836.                with -LANG:create_pch or -LANG:use_pch the indicated
  837.                filename is tacked on to the directory specified by
  838.                this name, unless the file name is an absolute path
  839.                name.
  840.  
  841.  
  842.           1.9  _N_e_w__F_e_a_t_u_r_e_s__i_n__M_I_P_S_p_r_o__7_._2
  843.  
  844.           1.9.1  _M_I_P_S_p_r_o__A_u_t_o__P_a_r_a_l_l_e_l_i_z_i_n_g__O_p_t_i_o_n
  845.  
  846.           The MIPSpro Auto Parallelizing Option is a new product which
  847.           provides support for automatic parallelization for the
  848.           MIPSpro 7.2 family of compilers.  Similar to Power C
  849.           Analyzer and Power Fortran Analyzer, Auto Parallelizing
  850.  
  851.  
  852.  
  853.  
  854.  
  855.  
  856.  
  857.  
  858.  
  859.  
  860.  
  861.                                      - 14 -
  862.  
  863.  
  864.  
  865.           Option will automatically try parallelize C, C++, Fortran77
  866.           and Fortran90 programs when -pfa or -pca is specified on he
  867.           compiler command-line.  One copy of Auto Parallelizing
  868.           Option works for all four languages.  It only supports the
  869.           64-bit (-64) and new high performance 32-bit (-n32) ABI's.
  870.           The old 32-bit ABI (-32) is not supported by this product.
  871.  
  872.  
  873.           1.9.2  _D_a_t_a__D_i_s_t_r_i_b_u_t_i_o_n__D_i_r_e_c_t_i_v_e_s
  874.  
  875.           The MIPSpro 7.2 compiler operating in the n32 and 64-bit
  876.           mode provides for data distribution pragmas such as
  877.           distribute, and distribute-reshape, which allow for explicit
  878.           data parallelism to be exploited in a multi-processing
  879.           environment. This is in addition to the multi-processing MP
  880.           pragmas for which support has been provided since 7.1. The
  881.           programmer's guide describes the data distribution pragmas
  882.           and their use on multiprocessing machines such as the Origin
  883.           series.
  884.  
  885.  
  886.           1.9.3  _N_e_w__P_a_r_a_l_l_e_l__P_r_a_g_m_a__O_p_t_i_o_n_s
  887.  
  888.           MIPSpro 7.2 now supports some new optional arguments to the
  889.           pfor parallel pragmas when -mp is specified on the compiler
  890.           command-line: onto, nest, local, lastlocal, affinity, and
  891.           reduction.  Also, the synchronize pragma can now be used
  892.           outside of parallel regions.  See he MIPSpro C and C++
  893.           Pragmas document for more information on these parallel
  894.           pragmas.
  895.  
  896.  
  897.           1.9.4  _N_e_w__S_y_m_b_o_l__S_t_o_r_a_g_e__D_i_r_e_c_t_i_v_e_s
  898.  
  899.           Two new directives have been added in MIPSpro 7.2 to control
  900.           the way symbols are stored: ALIGN_SYMBOL and FILL_SYMBOL.
  901.           The ALIGN_SYMBOL directive aligns the start of symbol at a
  902.           specified alignment boundary. The FILL_SYMBOL directive pads
  903.           symbol with additional storage so that the symbol is assured
  904.           not to overlap with any other data item within the storage
  905.           of the specified size. The additional padding required is
  906.           divided between each end of the specified variable.
  907.  
  908.  
  909.           1.9.5  _V_a_r_i_a_b_l_e__L_e_n_g_t_h__A_r_r_a_y_s
  910.  
  911.           MIPSpro 7.2 now supports variable length arrays. Array dummy
  912.           arguments and local arrays can now be declared as variable
  913.           length arrays rather than as pointers.  This allows the
  914.           compiler to make assumptions about aliasing and can allow
  915.           more optimizations to be applied to code containing
  916.  
  917.  
  918.  
  919.  
  920.  
  921.  
  922.  
  923.  
  924.  
  925.  
  926.  
  927.                                      - 15 -
  928.  
  929.  
  930.  
  931.           references to the array.  This is particularly beneficial
  932.           for parallelization.  The syntax for variable length arrays
  933.           is:
  934.  
  935.           int foo( int n, float a[n][n] ) {
  936.              float b[n];
  937.           }
  938.  
  939.           In the example above, dummy argument a and local variable b
  940.           are both variable length arrays.
  941.  
  942.           Variable length arrays are provided in C++ as an
  943.           experimental feature and may not work in the presence of C++
  944.           features such as templates and exceptions.
  945.  
  946.  
  947.           1.9.6  _F_r_e_q_u_e_n_c_y__h_i_n_t__p_r_a_g_m_a_s
  948.  
  949.           MIPSpro 7.2 now supports a new pragma "#pragma
  950.           mips_freqency_hint" that is used to tell the compiler that a
  951.           branch or function is rarely executed. The compiler uses
  952.           this information to make better optimization decisions. A
  953.           branch can be marked a infreqently taken in this fashion:
  954.  
  955.           if ( a < b ) {
  956.           #pragma mips_frequency_hint NEVER
  957.              printf("error condition0);
  958.           }
  959.  
  960.           While a function can be so marked this way:
  961.  
  962.           void handle_error( int i );
  963.           #pragma mips_frequency_hint NEVER handle_error
  964.  
  965.           Frequency information about a function gets propagated to
  966.           all instances where the function is used.  So a branch that
  967.           contains a call to an infrequent function is considered
  968.           infrequently executed itself.
  969.  
  970.           1.9.7  _P_R_I_N_T_F_L_I_K_E__l_i_n_t__s_t_y_l_e__c_o_m_m_e_n_t
  971.  
  972.           This comment applies lint style check to the first (n-1)
  973.           arguments as usual. The nth argument is interpreted as a
  974.           printf format string that is used to check the remaining
  975.           arguments.
  976.  
  977.  
  978.  
  979.  
  980.  
  981.  
  982.  
  983.  
  984.  
  985.  
  986.  
  987.  
  988.  
  989.  
  990.  
  991.  
  992.  
  993.                                      - 16 -
  994.  
  995.  
  996.  
  997.           1.9.8  _S_C_A_N_F_L_I_K_E__l_i_n_t__s_t_y_l_e__c_o_m_m_e_n_t
  998.  
  999.           This comment applies lint style check to the first (n-1)
  1000.           arguments as usual. The nth argument is interpreted as a
  1001.           scanf format string that is used to check the remaining
  1002.           arguments.
  1003.  
  1004.           1.9.9  _-_a_r__f_l_a_g_.
  1005.  
  1006.           ar(1) should not be invoked to create an archive of c++
  1007.           objects. Instead the -ar flag of CC(1) should be used to
  1008.           create an archive. This flag will instantiate all the
  1009.           necessary template entities before creating the archive. See
  1010.           -ar option in CC(1) man page.
  1011.  
  1012.  
  1013.           1.10  _N_e_w__B_o_o_k_s
  1014.  
  1015.           MIPSPro C and C++ Pragmas
  1016.  
  1017.  
  1018.           1.11  _C_o_m_p_a_t_i_b_i_l_i_t_y__w_i_t_h__c_+_+__7_._1
  1019.  
  1020.           The 7.2   C++ compiler operating in 32-bit mode as well as
  1021.           n32 and 64-bit mode is fully link-compatible with code
  1022.           compiled with C++ 7.1 with the following exceptions (n32 and
  1023.           64-bit mode only):
  1024.  
  1025.           1.11.1  _-_e_x_p_e_r_i_m_e_n_t_a_l__f_l_a_g__n_o__l_o_n_g_e_r__s_u_p_p_o_r_t_e_d
  1026.  
  1027.           The flag -experimental, which could be used with the 7.1
  1028.           compiler to invoke an experimental version which supported
  1029.           namespaces, is no longer supported, since the released
  1030.           compiler now supports namespaces and other new features.
  1031.  
  1032.  
  1033.           1.11.2  _R_u_n_t_i_m_e _c_h_a_n_g_e _i_n _s_e_m_a_n_t_i_c_s _o_f _c_o_p_y _a_s_s_i_g_n_m_e_n_t
  1034.                   _o_p_e_r_a_t_o_r _c_a_l_l_s
  1035.  
  1036.           This is a change in runtime behavior! It only affects you if
  1037.           you define an assignment operator in class B, but the type
  1038.           of argument that this operator accepts is not of type B.
  1039.  
  1040.  
  1041.  
  1042.  
  1043.  
  1044.  
  1045.  
  1046.  
  1047.  
  1048.  
  1049.  
  1050.  
  1051.  
  1052.  
  1053.  
  1054.  
  1055.  
  1056.  
  1057.  
  1058.  
  1059.                                      - 17 -
  1060.  
  1061.  
  1062.  
  1063.           struct A {};
  1064.           struct B {
  1065.               B();
  1066.               B& operator= (const A&);
  1067.               operator A& ()  const;
  1068.           };
  1069.  
  1070.           main()
  1071.           {
  1072.              B b1, b2;
  1073.              b1 = b2;
  1074.              return 0;
  1075.           }
  1076.  
  1077.           With the 7.1 compilers, the statement b1 = b2 generated a
  1078.           call to the conversion operator function "operator A& ()
  1079.           const" to convert a B object to an object of type A followed
  1080.           by a call to operator function "B& operator= () const(A&)"
  1081.           to copy the A object.
  1082.  
  1083.           This behavior was incorrect since the function  "B&
  1084.           operator= (const A&)" is not a copy assignment operator. A
  1085.           copy assignment operator can take exactly one parameter of
  1086.           the form A, A&, const A&, volatile A&, or const volatile A&.
  1087.  
  1088.           With the 7.2 compilers, the frontend will implicitly
  1089.           generate a copy assignment operator of the form
  1090.           B::operator=(const B &) which will perform a bitwise copy.
  1091.           This may result in completely different runtime behavior.
  1092.           The compiler will warn in such cases with the following
  1093.           message:
  1094.  
  1095.           "t.c";, line 12: warning(3149): class "B" has no copy assignment operator. A
  1096.                   copy assignment operator of the form
  1097.                   "B::operator=(const B &)" has been implicitly defined. The
  1098.                   implicitly defined copy assignment operator will perform a bitwise
  1099.                   copy. Previous compiler versions may have used assignment operator
  1100.                   functions defined in this class with conversion operators as copy
  1101.                   assignment operators. This change may lead to different runtime
  1102.                   behavior. Define a copy assignment operator if necessary.
  1103.  
  1104.           The suggested approach to fix the problem is to define a
  1105.           copy assigment operator that performs the copy. In the above
  1106.           test case, one could add a member function in B:
  1107.  
  1108.           B& operator= (const B& arg) {
  1109.             *this = ( const A&) arg; // Convert the argument to a 'A' object and
  1110.                                       // then call the operator= function.
  1111.           }
  1112.  
  1113.  
  1114.  
  1115.  
  1116.  
  1117.  
  1118.  
  1119.  
  1120.  
  1121.  
  1122.  
  1123.  
  1124.  
  1125.                                      - 18 -
  1126.  
  1127.  
  1128.  
  1129.           1.11.3  _P_r_e_v_i_o_u_s_l_y__u_n_d_i_a_g_n_o_s_e_d__e_r_r_o_r__o_n__n_o_n_m_e_m_b_e_r__o_p_e_r_a_t_o_r_s
  1130.  
  1131.           Non-member operators have always required at least one class
  1132.           (or reference to class) parameter. Earlier compilers have
  1133.           occasionally failed to diagnose this problem, particularly
  1134.           when this happened in template functions. C++ 7.2 will
  1135.           always give you a compile time error for this.
  1136.  
  1137.           template <class T>
  1138.           class Ptr{
  1139.           };
  1140.  
  1141.           template <class T&>
  1142.           int operator!=(Ptr<T>* a, Ptr<T>* b); //Should be an error
  1143.  
  1144.           The fix is to remove any such functions; they could not
  1145.           possibly have been invoked in earlier compilers, so removing
  1146.           them cannot change program behavior.
  1147.  
  1148.           1.11.4  _A_m_b_i_g_u_i_t_y__w_i_t_h__c_o_n_d_i_t_i_o_n_a_l__o_p_e_r_a_t_o_r
  1149.  
  1150.           This issue pertains to ?: expressions where the left and
  1151.           right arms are of different types. For example:
  1152.  
  1153.           struct A {
  1154.              A();
  1155.              A(int);
  1156.              operator int();
  1157.           };
  1158.  
  1159.           void foo(int i,int j) {
  1160.              i ? A() : j; //AMBIGUOUS in 7.2 -n32
  1161.           }
  1162.  
  1163.           "foo.c", line 8: error(1324): more than one operator"?" matches these
  1164.                     operands:
  1165.                       built-in operator "expression ? class : class"
  1166.                       built-in operator "expression ? arithmetic : arithmetic"
  1167.                       operand types are: A : int
  1168.                       Recent changes to Ansi C++ draft standard may have
  1169.                       made this expression ambiguous. Please rewrite
  1170.                       the expression to remove the ambiguity. To get the old behavior
  1171.                       use the "-Wf,-old_conditional_operator_rules" flag.
  1172.                i ? A() : j; //AMBIGUOUS in 7.2 -n32
  1173.  
  1174.           In the example above, the compiler could determine the
  1175.           return type of the ?: in two ways:
  1176.  
  1177.              +o Convert the A() to an int and make the result of int
  1178.                type
  1179.  
  1180.  
  1181.  
  1182.  
  1183.  
  1184.  
  1185.  
  1186.  
  1187.  
  1188.  
  1189.  
  1190.  
  1191.                                      - 19 -
  1192.  
  1193.  
  1194.  
  1195.              +o Convert the int to an A, and make the result of type A
  1196.  
  1197.           It is therefore an ambiguous construct. It used to be that
  1198.           the compiler would always prefer converting the A() to an
  1199.           int, but the standard now makes this ambiguous. The
  1200.           suggested way of making this code work with all compilers is
  1201.           to use an explicit cast to make the result type unambiguous.
  1202.           In this case, what was probably intended was:
  1203.  
  1204.           i ? (int)A() : j;
  1205.  
  1206.           The other choice would be:
  1207.  
  1208.           i ? A() : (A)j
  1209.  
  1210.           If you cannot change your source code, use the
  1211.            "-Wf,-old_conditional_operator_rules" flag.
  1212.  
  1213.           1.11.5  _E_n_u_m_e_r_a_t_o_r_s__c_a_n_n_o_t__b_e__c_o_n_v_e_r_t_e_d__t_o__p_o_i_n_t_e_r_s
  1214.  
  1215.           An enum in C++ is not a numeric type, and there is no
  1216.           implicit conversion to a pointer.  The 7.1 compiler failed
  1217.           to diagnose this error.
  1218.  
  1219.           enum fruit {orange};
  1220.           void* p = orange; //This is an error
  1221.           "foo.c", line 2: error(1140): a value of type "fruit" cannot be used to
  1222.                     initialize an entity of type "void *"
  1223.             void* p = orange;
  1224.  
  1225.           The way to fix this is to explicitly cast the enum to an
  1226.           int.
  1227.  
  1228.           enum fruit {orange};
  1229.           void* p = (int)orange; //This is fine
  1230.  
  1231.           1.11.6  _N_e_w__k_e_y_w_o_r_d_s
  1232.  
  1233.           There are four new reserved words in C++ 7.2: "typename",
  1234.           "explicit", "namespace", and "mutable". All existing code
  1235.           should be modified so that it does not use these words as
  1236.           identifiers.  If for some reason you are unable to modify
  1237.           code that uses these reserved words (e.g. it's in a third
  1238.           party header), you can use any combination of the following
  1239.           options: -LANG:explicit=off, or -LANG:typename=off, or
  1240.           -LANG:namespace=off or -LANG:mutable=off Note that in a
  1241.           future release "export" will also be made a keyword, so you
  1242.           should not be using this as an identifier.
  1243.  
  1244.  
  1245.  
  1246.  
  1247.  
  1248.  
  1249.  
  1250.  
  1251.  
  1252.  
  1253.  
  1254.  
  1255.  
  1256.  
  1257.                                      - 20 -
  1258.  
  1259.  
  1260.  
  1261.           1.11.7  _S_t_a_n_d_a_r_d__p_l_a_c_e_m_e_n_t__n_e_w__c_a_n_n_o_t__b_e__p_r_e_e_m_p_t_e_d
  1262.  
  1263.           A placement version of operator new used to be defined as
  1264.           follows in new.h:
  1265.  
  1266.              void *operator new(size_t, void* p);
  1267.  
  1268.           The library used to provide the obvious implementation:
  1269.  
  1270.              void *operator new(size_t, void* p) {return p; }
  1271.  
  1272.           The C++ standard now states that the standard version of
  1273.           placement operator new cannot be preempted. This allows us
  1274.           to provide an inline version of placement operator new in
  1275.           new.h:
  1276.  
  1277.              inline void *operator new(size_t, void* p) { return p; }
  1278.  
  1279.           One consequence of this is that if you explicitly define
  1280.           your own version of placement operator new (whether inline
  1281.           or out-of-line) you will get an error.  In previous
  1282.           releases, it was possible to define your own version of
  1283.           placement operator new.
  1284.  
  1285.           For example:
  1286.  
  1287.           #include <new.h>
  1288.           inline void *operator new(size_t, void* p) { return p; }
  1289.  
  1290.           will get the following error:
  1291.  
  1292.           "foo.c", line 2: error(1220): function "operator new(size_t, void *)" has
  1293.                     already been defined
  1294.             inline void *operator new(size_t, void* p) { return p; }
  1295.  
  1296.           Note that this does not prevent you from defining your own
  1297.           versions of placement operator new which have parameter
  1298.           profiles which are different from the standard All of the
  1299.           above discussion also applies to operator new [].
  1300.  
  1301.  
  1302.           1.12  _L_a_n_g_u_a_g_e__S_u_p_p_o_r_t_e_d
  1303.  
  1304.           1.12.1  _N_e_w__L_a_n_g_u_a_g_e__F_e_a_t_u_r_e_s__A_c_c_e_p_t_e_d
  1305.  
  1306.           The following features not in the C++ Annotated Reference
  1307.           Manual but in the current X3716/WG21 Working Paper are
  1308.           accepted (for the 64-bit and n32 compilers only):
  1309.  
  1310.              +o The dependent statement of an "if", "while", "do", or
  1311.                "for" statement is considered to be a scope, and the
  1312.  
  1313.  
  1314.  
  1315.  
  1316.  
  1317.  
  1318.  
  1319.  
  1320.  
  1321.  
  1322.  
  1323.                                      - 21 -
  1324.  
  1325.  
  1326.  
  1327.                restriction on having such a dependent statement be a
  1328.                declaration is removed.
  1329.  
  1330.              +o The draft C++ standard specifies that the scope of a
  1331.                variable declared in the for-init-statement of a for-
  1332.                loop is the scope of the loop, not the surrounding
  1333.                scope.  This feature is now implemented, but because
  1334.                this is the first compiler release to implement it, and
  1335.                because the change could break a lot of existing code,
  1336.                it has been implemented only if -LANG:ansi-for-init-
  1337.                scope=on is specified on the command line.  The default
  1338.                behavior will be changed in a future release (possibly
  1339.                in the next release).  We strongly recommend that you
  1340.                start compiling with the -LANG:ansi-for-init-scope=on
  1341.                to find and correct code that does not conform to the
  1342.                draft standard.
  1343.  
  1344.              +o Qualified names are allowed in elaborated type
  1345.                specifiers.
  1346.  
  1347.              +o A global-scope qualifier is allowed in member
  1348.                references of the form x.::A::B or p->::A::B
  1349.  
  1350.              +o The precedence of the third operand of the ? operator
  1351.                is changed.
  1352.  
  1353.              +o If control reaches the end of the main routine, and
  1354.                main has an integral return type, it is treated as if a
  1355.                "return 0" statement were executed.
  1356.  
  1357.              +o Pointers to arrays with unknown bounds as parameter
  1358.                types are diagnosed as errors.
  1359.  
  1360.              +o A functional-notation cast of the form "A()" can be
  1361.                used even if A is a class without a nontrivial
  1362.                constructor.  The temporary created gets the same
  1363.                default initialization to zero as a static object of
  1364.                the class type.
  1365.  
  1366.              +o A cast can be used to select one out of a set of
  1367.                overloaded functions when taking the address of a
  1368.                function.
  1369.  
  1370.              +o Template friend declarations and definitions are
  1371.                permitted in class definitions and class template
  1372.                definitions.
  1373.  
  1374.              +o Type template parameters are permitted to have default
  1375.                arguments.
  1376.  
  1377.  
  1378.  
  1379.  
  1380.  
  1381.  
  1382.  
  1383.  
  1384.  
  1385.  
  1386.  
  1387.  
  1388.  
  1389.                                      - 22 -
  1390.  
  1391.  
  1392.  
  1393.              +o Function templates may have nontype template
  1394.                parameters.
  1395.  
  1396.              +o A reference to const volatile cannot be bound to an
  1397.                rvalue.
  1398.  
  1399.              +o Qualification conversions such as conversion from (T**)
  1400.                to T const * const * are allowed.
  1401.  
  1402.              +o Static data member declarations can be used to declare
  1403.                member constants.
  1404.  
  1405.              +o wchar_t is recognized as a keyword and a distinct type.
  1406.  
  1407.              +o bool is recognized.
  1408.  
  1409.              +o RTTI (runtime type-identification), including
  1410.                dynamic_cast and the typeid operator, is implemented.
  1411.  
  1412.              +o Array new and delete are implemented.
  1413.  
  1414.              +o New-style casts (static_cast, reinterpret_cast, and
  1415.                const-cast) are implemented.
  1416.  
  1417.              +o Definition of a nested class outside its enclosing
  1418.                class is allowed.
  1419.  
  1420.              +o "mutable" is accepted on nonstatic data member
  1421.                declarations.
  1422.  
  1423.              +o Namespaces are implemented, including "using"
  1424.                declarations and directives.  Access declarations are
  1425.                broadened to match the corrsponding "using"
  1426.                declarations.
  1427.  
  1428.              +o Explicit instantiation of templates is implemented.
  1429.  
  1430.              +o The "typename" keyword is recognized.
  1431.  
  1432.              +o "explicit" is accepted to declare nonconverting
  1433.                constructors.
  1434.  
  1435.              +o Member templates are supported.
  1436.  
  1437.              +o The new specialization syntax (using "template<>") is
  1438.                implemented.
  1439.  
  1440.              +o Cv-qualifiers are retained on rvalues (in particular,
  1441.                on function return values).
  1442.  
  1443.  
  1444.  
  1445.  
  1446.  
  1447.  
  1448.  
  1449.  
  1450.  
  1451.  
  1452.  
  1453.  
  1454.  
  1455.                                      - 23 -
  1456.  
  1457.  
  1458.  
  1459.              +o The distinction between trivial and nontrivial
  1460.                constructors has been implemented, as has the
  1461.                distinction between PODs and non-PODs with trivial
  1462.                constructors.
  1463.  
  1464.              +o The linkage specification is treated as part of the
  1465.                function type (affecting function overloading and
  1466.                implicit conversions).
  1467.  
  1468.              +o A typedef name may be used in an explicit destructor
  1469.                call.
  1470.  
  1471.              +o Placement delete is implemented.
  1472.  
  1473.              +o enum types are considered to be non-integral types.
  1474.  
  1475.              +o Partial specialization of class templates is
  1476.                implemented.
  1477.  
  1478.           1.12.2  _N_e_w__L_a_n_g_u_a_g_e__F_e_a_t_u_r_e_s__N_o_t__A_c_c_e_p_t_e_d
  1479.  
  1480.           The following features not in the ARM but in the X3J16/WG21
  1481.           Working Paper are not accepted:
  1482.  
  1483.              +o It is not possible to overload operators using
  1484.                functions that take enum types and no class types.
  1485.  
  1486.              +o The new lookup rules for member references of the form
  1487.                x.A and p->A::B are not yet implemented.
  1488.  
  1489.              +o enum types cannot contain values larger than can be
  1490.                contained in an int.
  1491.  
  1492.              +o reinterpret_cast does not allow casting a pointer to
  1493.                member of one class to a pointer to member of another
  1494.                class.
  1495.  
  1496.              +o Explicit qualification of template functions is not
  1497.                implemented.
  1498.  
  1499.              +o The new template compilation model is not yet
  1500.                implemented.
  1501.  
  1502.              +o In a reference of the form f()->g(), with g a static
  1503.                member function, f() is not evaluated.
  1504.  
  1505.              +o Class name injection is not implemented.
  1506.  
  1507.              +o Putting a try/catch around the initializers and body of
  1508.                a constructor is not implemented.
  1509.  
  1510.  
  1511.  
  1512.  
  1513.  
  1514.  
  1515.  
  1516.  
  1517.  
  1518.  
  1519.  
  1520.  
  1521.                                      - 24 -
  1522.  
  1523.  
  1524.  
  1525.              +o The notation ::template (and ->template, etc.) is not
  1526.                implemented.
  1527.  
  1528.              +o Template template parameters are not implemented.
  1529.  
  1530.              +o Certain restrictions are not yet enforced on the use of
  1531.                pointer-to-function types that involve exception
  1532.                specifications.
  1533.  
  1534.              +o "Koenig lookup" of function names on calls is not
  1535.                implemented.
  1536.  
  1537.              +o Finding friend functions of the argument types on name
  1538.                lookup on the function name in calls is not
  1539.                implemented.
  1540.  
  1541.              +o Digraphs and operator keywords are not recognized.
  1542.  
  1543.              +o Covariant return types are not supported.
  1544.  
  1545.              +o "extern inline" is not implemented.
  1546.  
  1547.           1.12.3  _F_e_a_t_u_r_e__M_a_c_r_o_s
  1548.  
  1549.           A number of language features can be disabled via
  1550.           commandline options.  When this happens certain macros which
  1551.           are normally defined remain undefined.  These can then be
  1552.           used in #ifdefs in source files to do conditional
  1553.           compilation based on whether or not these features are
  1554.           enabled.  The following feature macros are defined or not
  1555.           depending on whether or not the corresponding feature is
  1556.           enabled.
  1557.  
  1558.              +o __EXCEPTIONS is defined unless -LANG:exceptions=off is
  1559.                specified.
  1560.  
  1561.              +o _BOOL is defined unless -LANG:bool=off is specified.
  1562.  
  1563.              +o _WCHAR_T_IS_KEYWORD is defined unless -LANG:wchar_t=off
  1564.                is specified.
  1565.  
  1566.              +o _MUTABLE_IS_KEYWORD is defined unless -LANG:mutable=off
  1567.                is specified.
  1568.  
  1569.              +o _EXPLICIT_IS_KEYWORD is defined unless
  1570.                -LANG:explicit=off is specified.
  1571.  
  1572.  
  1573.  
  1574.  
  1575.  
  1576.  
  1577.  
  1578.  
  1579.  
  1580.  
  1581.  
  1582.  
  1583.  
  1584.  
  1585.  
  1586.  
  1587.                                      - 25 -
  1588.  
  1589.  
  1590.  
  1591.           1.13  _C_+_+__C_o_m_p_i_l_e_r__F_i_l_e_s
  1592.  
  1593.           After installing the C++ Compiler images from both the
  1594.           MIPSpro C++ CD and the IRIX Development Foundation CD, you
  1595.           should have the following files:
  1596.  
  1597.           /_u_s_r/_b_i_n/_C_C                      C++ compiler driver
  1598.  
  1599.           /_u_s_r/_l_i_b_3_2/_c_m_p_l_r_s/_f_e_c_c           The n32/64-bit compiler
  1600.                                            frontend
  1601.  
  1602.           /_u_s_r/_l_i_b_3_2/_c_m_p_l_r_s/_b_e             The n32/64-bit compiler
  1603.                                            backend
  1604.  
  1605.           /_u_s_r/_l_i_b/_D_C_C/_e_d_g_c_p_f_e             The 32-bit compiler
  1606.                                            frontend
  1607.  
  1608.           /_u_s_r/_l_i_b/_D_C_C/_e_d_g__p_r_e_l_i_n_k         The "prelinker" which
  1609.                                            controls template
  1610.                                            instantiation
  1611.  
  1612.           /_u_s_r/_l_i_b/_c++/_c++_p_a_t_c_h            C++ post-processor
  1613.  
  1614.           /_u_s_r/_i_n_c_l_u_d_e/_C_C                  C++ include file directory
  1615.  
  1616.           /_u_s_r/_i_n_c_l_u_d_e/_C_C/_e_x_c_e_p_t_i_o_n._h      Entities such as
  1617.                                            _b_a_d__e_x_c_e_p_t_i_o_n,
  1618.                                            _s_e_t__t_e_r_m_i_n_a_t_e, and
  1619.                                            _s_e_t__u_n_e_x_p_e_c_t_e_d required for
  1620.                                            exception handling.
  1621.  
  1622.           /_u_s_r/_i_n_c_l_u_d_e/_C_C/_s_t_d_e_x_c_e_p_t._h      Definition of the
  1623.                                            _s_t_d::_e_x_c_e_p_t_i_o_n class, which
  1624.                                            is the base class for any
  1625.                                            exceptions thrown by the
  1626.                                            C++ runtime
  1627.  
  1628.           /_u_s_r/_l_i_b/_l_i_b_c_o_m_p_l_e_x._a            Non-template C++ complex
  1629.                                            math library for 32-bit
  1630.                                            compiler
  1631.  
  1632.           /_u_s_r/_l_i_b_3_2/_l_i_b_C_o_m_p_l_e_x._a          Template-based C++ complex
  1633.                                            math library for n32
  1634.                                            compiler
  1635.  
  1636.           /_u_s_r/_l_i_b_3_2/_l_i_b_c_o_m_p_l_e_x._a          Non-template C++ complex
  1637.                                            math library for n32
  1638.                                            compiler
  1639.  
  1640.           /_u_s_r/_l_i_b_6_4/_l_i_b_C_o_m_p_l_e_x._a          Template-based C++ complex
  1641.                                            math library for 64-bit
  1642.  
  1643.  
  1644.  
  1645.  
  1646.  
  1647.  
  1648.  
  1649.  
  1650.  
  1651.  
  1652.  
  1653.                                      - 26 -
  1654.  
  1655.  
  1656.  
  1657.                                            compiler
  1658.  
  1659.           /_u_s_r/_l_i_b_6_4/_l_i_b_c_o_m_p_l_e_x._a          Non-template C++ complex
  1660.                                            math library for 64-bit
  1661.                                            compiler
  1662.  
  1663.           /_u_s_r/_l_i_b/_c++/_l_i_b_m_a_n_g_l_e._a         C++ name-demangler library
  1664.  
  1665.           /_u_s_r/_l_i_b/_c++/_c++_f_i_l_t             C++ name-demangling utility
  1666.  
  1667.           /_u_s_r/_c_a_t_m_a_n/_u__m_a_n/_c_a_t_1/_C_C._z      C++ compiler driver manual
  1668.                                            page
  1669.  
  1670.           /_u_s_r/_r_e_l_n_o_t_e_s/_C_C                 C++ Release Notes directory
  1671.  
  1672.           The following files are present only for supporting the old
  1673.           _c_f_r_o_n_t-based compiler, and will be unavailable in future
  1674.           releases:
  1675.  
  1676.           /_u_s_r/_l_i_b/_c++/_c_f_r_o_n_t              The old C++ Translator, for
  1677.                                            use with -use_cfront
  1678.  
  1679.           /_u_s_r/_l_i_b/_c++/_m_a_r_k_c++             The old utility to identify
  1680.                                            C++ files for _d_b_x(_1)
  1681.  
  1682.           /_u_s_r/_l_i_b/_c++/_p_t_c_o_m_p              Old tool for Template
  1683.                                            support for cfront
  1684.  
  1685.           /_u_s_r/_l_i_b/_c++/_p_t_l_i_n_k              Old tool for Template
  1686.                                            support for cfront
  1687.  
  1688.           "Note:"  The C++ libraries for the 32-bit compiler
  1689.           /_u_s_r/_l_i_b/_l_i_b_C._s_o and /_u_s_r/_l_i_b/_l_i_b_C_s_u_p._s_o are  installed from
  1690.           the subsystem _c++__e_o_e._s_w._l_i_b.  This allows application
  1691.           libraries written in C++ to be used on systems that do not
  1692.           have C++ installed.  The corresponding libraries for the
  1693.           64-bit and n32 compilers are in the directories /_u_s_r/_l_i_b_6_4
  1694.           and /_u_s_r/_l_i_b_3_2 respectively and are installed from the
  1695.           subsystems _c++__e_o_e_6_4._s_w._l_i_b and  _c++__e_o_e_3_2._s_w._l_i_b
  1696.           respectively.
  1697.  
  1698.  
  1699.           1.14  _C_+_+__C_o_m_p_i_l_e_r__D_o_c_u_m_e_n_t_a_t_i_o_n
  1700.  
  1701.           Silicon Graphics has produced the following C++ Compiler
  1702.           documentation:
  1703.  
  1704.              +o _C_C(1) man page (printed and online version)
  1705.  
  1706.              +o _7._2  _C++ _R_e_l_e_a_s_e _N_o_t_e_s (this online document)
  1707.  
  1708.  
  1709.  
  1710.  
  1711.  
  1712.  
  1713.  
  1714.  
  1715.  
  1716.  
  1717.  
  1718.  
  1719.                                      - 27 -
  1720.  
  1721.  
  1722.  
  1723.              +o Online manual (see the packing manifest above)
  1724.  
  1725.  
  1726.           1.15  _R_u_n_t_i_m_e__P_e_r_f_o_r_m_a_n_c_e__E_n_h_a_n_c_e_m_e_n_t_s
  1727.  
  1728.  
  1729.           The 7.2   C++ compiler operating in the n32 and 64-bit mode
  1730.           provides improved runtime performance. In particular,
  1731.           performance improvements from 10% to 50% over 7.1 are
  1732.           achieved by  enhancements in inlining,  alias analysis,
  1733.           scalar and struct optimizations, and loop optimizations.
  1734.  
  1735.           The MIPSpro Compiling And Performance Tuning Guide provides
  1736.           tips on how to get the best runtime performance from C and
  1737.           C++ programs.  Additionally the following option is provided
  1738.           for improved analysis of functions which take parameters by
  1739.           const reference.
  1740.  
  1741.  
  1742.           1.15.1  _c_o_n_s_t _r_e_f_e_r_e_n_c_e _p_a_r_a_m_e_t_e_r _o_p_t_i_m_i_z_a_t_i_o_n _w_i_t_h
  1743.                   -_L_A_N_G:_a_l_i_a_s__c_o_n_s_t
  1744.  
  1745.  
  1746.           Consider the following example:
  1747.  
  1748.  
  1749.           extern void pass_by_const_ref(const int& i);
  1750.  
  1751.           int test(){
  1752.              //This requires -LANG:alias_const to get the performance enhancements
  1753.              int i = 10
  1754.              int j = 15
  1755.              pass_by_const_ref(i);
  1756.              pass_by_const_ref(j);
  1757.              return i + j;
  1758.           }
  1759.  
  1760.  
  1761.  
  1762.           In the example above, the compiler determines that the
  1763.           function pass_by_const_ref does NOT modify its formal
  1764.           parameter i: ie the parameter i passed by const reference
  1765.           does NOT get modified in the function. Consequently the
  1766.           compiler can forward propagate the values of i and j to the
  1767.           return statement, whereas it would otherwise have had to
  1768.           reload the values of i and j after the two calls to
  1769.           pass_by_const_ref.
  1770.  
  1771.  
  1772.           (_N_O_T_E: FFFFoooorrrr tttthhhhiiiissss ooooppppttttiiiimmmmiiiizzzzaaaattttiiiioooonnnn ttttoooo wwwwoooorrrrkkkk ccccoooorrrrrrrreeeeccccttttllllyyyy,,,, bbbbooootttthhhh tttthhhheeee
  1773.           ccccaaaalllllllleeeerrrr aaaannnndddd tttthhhheeee ccccaaaalllllllleeeeeeee hhhhaaaavvvveeee ttttoooo bbbbeeee ccccoooommmmppppiiiilllleeeedddd wwwwiiiitttthhhh
  1774.  
  1775.  
  1776.  
  1777.  
  1778.  
  1779.  
  1780.  
  1781.  
  1782.  
  1783.  
  1784.  
  1785.                                      - 28 -
  1786.  
  1787.  
  1788.  
  1789.           ----LLLLAAAANNNNGGGG::::aaaalllliiiiaaaassss____ccccoooonnnnsssstttt....).
  1790.  
  1791.  
  1792.           The reason this option is not on by default is that the user
  1793.           can legally cast away the const qualifier and modify the
  1794.           const parameter.
  1795.            With this option the compiler makes an effort to issue
  1796.           warnings when the callee casts away the const and modifies
  1797.           the parameter. For example,
  1798.  
  1799.  
  1800.           void f(const int &x) {int *y = (int *) &x; *y = 99;}
  1801.  
  1802.           int main() {
  1803.             int z;
  1804.             f(z); // call to f does modify z; Hence z needs to be reloaded after the call
  1805.             return z;
  1806.           }
  1807.  
  1808.  
  1809.           With the above example, and -LANG:alias_const, the compiler
  1810.           gives a warning:
  1811.  
  1812.           Compiling f__GRCi
  1813.           "ex9.C", line 2 (col. 28): warning(3334): cast to type "int *" may not be safe
  1814.                     in presence of -LANG:alias_const. Make sure you are not casting away
  1815.                     const to MODIFY the parameter
  1816.  
  1817.  
  1818.           For the above example, it is NOT safe to use
  1819.           -LANG:alias_const.  However, if the user specifies the
  1820.           "mutable" keyword then this const optimization is disabled.
  1821.           For example:
  1822.  
  1823.  
  1824.  
  1825.  
  1826.  
  1827.  
  1828.  
  1829.  
  1830.  
  1831.  
  1832.  
  1833.  
  1834.  
  1835.  
  1836.  
  1837.  
  1838.  
  1839.  
  1840.  
  1841.  
  1842.  
  1843.  
  1844.  
  1845.  
  1846.  
  1847.  
  1848.  
  1849.  
  1850.  
  1851.                                      - 29 -
  1852.  
  1853.  
  1854.  
  1855.  
  1856.           class C {
  1857.           public:
  1858.             mutable int p;
  1859.             void f() const { p = 99;} //mutable data member can be modified
  1860.                                       // by a const function
  1861.             int getf() const { return p;}
  1862.           };
  1863.  
  1864.           int main() {
  1865.             C c;
  1866.             c.f();// even with -LANG:alias_const, f() can modify c.p
  1867.             return c.getf();
  1868.           };
  1869.  
  1870.           The above example illustrates that in general,
  1871.           alias options should only be used with programs
  1872.           for which they are safe. For instance, -OPT:alias=unnamed
  1873.           and -OPT:alias=restrict are optimizations which are only safe for
  1874.           programs which satisfy the aliasing assumptions made by these
  1875.           optimizations. Hence such options are NOT default for C++ and
  1876.           should be used with caution.
  1877.  
  1878.  
  1879.  
  1880.  
  1881.           1.15.2  _C_o_m_p_i_l_i_n_g__w_i_t_h__-_L_A_N_G_:_e_x_c_e_p_t_i_o_n_s_=_o_f_f__f_o_r__N_O_N_-_E_H__c_o_d_e
  1882.  
  1883.  
  1884.           For code that doesn't throw/catch/propogate exceptions it is
  1885.           beneficial to compile with -LANG:exceptions=off. This
  1886.           permits optimizations that would otherwise be conservative
  1887.           around regions of code that may throw exceptions.
  1888.  
  1889.  
  1890.           1.16  _S_t_a_n_d_a_r_d__T_e_m_p_l_a_t_e__L_i_b_r_a_r_y
  1891.  
  1892.  
  1893.  
  1894.           This release includes the Standard Template Library (STL), a
  1895.           generic container, algorithm, and iterator library.  At
  1896.           present all STL code is in the form of header files, which
  1897.           are located in the directory /_u_s_r/_i_n_c_l_u_d_e/_C_C.  This
  1898.           directory is in the standard include path.
  1899.  
  1900.           This implementation of the STL is backward compatible with
  1901.           the free HP implementation, except that the definitions of
  1902.           stack, queue, and priority_queue have been changed to
  1903.           reflect the interface described by the draft C++ standard.
  1904.           New features, not part of the free HP implementation,
  1905.           include hash tables (defined in _h_a_s_h__s_e_t._h and _h_a_s_h__m_a_p._h),
  1906.  
  1907.  
  1908.  
  1909.  
  1910.  
  1911.  
  1912.  
  1913.  
  1914.  
  1915.  
  1916.  
  1917.                                      - 30 -
  1918.  
  1919.  
  1920.  
  1921.           singly linked lists (defined in _s_l_i_s_t._h), a scalable string
  1922.           representation (defined in _r_o_p_e._h) and high performance
  1923.           allocators (defined in _a_l_l_o_c._h).  This implementation of the
  1924.           STL is exception-safe and thread-safe.
  1925.  
  1926.           Features present in this release, but that were not present
  1927.           in 7.1, include:
  1928.  
  1929.              +o Exception safety. All STL components are now exception
  1930.                safe.
  1931.  
  1932.              +o New container class: _r_o_p_e. A scalable string
  1933.                representation.
  1934.  
  1935.              +o New container class: _s_l_i_s_t. Singly linked lists.
  1936.  
  1937.              +o Member templates. You can now use the fully general
  1938.                form of containers' copy constructors and insert member
  1939.                functions.  Note that this is only supported in the
  1940.                n32/64 compiler.
  1941.  
  1942.              +o New standard-conforming mechanism for accessing
  1943.                iterators' associated type information:
  1944.                _i_t_e_r_a_t_o_r__t_r_a_i_t_s.  The algorithms _c_o_u_n_t, _c_o_u_n_t__i_f, and
  1945.                _d_i_s_t_a_n_c_e have been rewritten in terms of
  1946.                _i_t_e_r_a_t_o_r__t_r_a_i_t_s.  Note that this is only supported in
  1947.                the n32/64 compiler.
  1948.  
  1949.              +o New algorithms:  _c_o_p_y__n, _l_e_x_i_c_o_g_r_a_p_h_i_c_a_l__c_o_m_p_a_r_e__3_w_a_y,
  1950.                _p_o_w_e_r, _r_a_n_d_o_m__s_a_m_p_l_e, _r_a_n_d_o_m__s_a_m_p_l_e__n,
  1951.                _u_n_i_n_i_t_i_a_l_i_z_e_d__c_o_p_y__n.
  1952.  
  1953.           Allocators in this implementation differ in function and
  1954.           interface from  allocators in the original STL documents.
  1955.           The default allocator, which is called _a_l_l_o_c, is thread-
  1956.           safe.  All containers are parameterized by allocators, so,
  1957.           for example, _l_i_s_t<_i_n_t> is equivalent to _l_i_s_t<_i_n_t, _a_l_l_o_c>.
  1958.           Three other allocators are provided:
  1959.  
  1960.              +o _s_i_n_g_l_e__c_l_i_e_n_t__a_l_l_o_c is faster but not thread-safe.
  1961.  
  1962.              +o _p_t_h_r_e_a_d__a_l_l_o_c is intended for pthreads only. It has
  1963.                better performance for multithreaded code. Objects
  1964.                should be deallocated by the allocating thread.  It is
  1965.                defined in _p_t_h_r_e_a_d__a_l_l_o_c._h.
  1966.  
  1967.              +o _m_a_l_l_o_c__a_l_l_o_c, which is preferable for use with Purify
  1968.                or other memory debugging tools.
  1969.  
  1970.              +o _d_e_b_u_g__a_l_l_o_c, an instrumenting allocator adaptor. It
  1971.                checks for improper deallocation calls in STL-
  1972.  
  1973.  
  1974.  
  1975.  
  1976.  
  1977.  
  1978.  
  1979.  
  1980.  
  1981.  
  1982.  
  1983.                                      - 31 -
  1984.  
  1985.  
  1986.  
  1987.                conformant containers.
  1988.  
  1989.           Ropes (_r_o_p_e._h in /_u_s_r/_i_n_c_l_u_d_e/_C_C) provide a scalable string
  1990.           implementation.  They are ideally suited to applications
  1991.           which must handle arbitrarily long strings with consistent
  1992.           performance, but for which in-place single-character updates
  1993.           are rare.  The time required to concatenate two ropes is
  1994.           almost independent of their length.  The interface is
  1995.           similar to, but not identical to that of basic_string
  1996.           defined in the current C++ draft standard.  The STL
  1997.           Programmer's Guide contains a more detailed description of
  1998.           both the rope interface, and the issues surrounding string
  1999.           representations in C++.
  2000.  
  2001.           The file _m_s_t_r_i_n_g._h, located in /_u_s_r/_i_n_c_l_u_d_e/_C_C, is not part
  2002.           of the STL.  It is a public domain string class written by
  2003.           Modena, and it is included for the sake of convenience. It
  2004.           is not recommended for multithreaded use.
  2005.  
  2006.  
  2007.  
  2008.           1.17  _N_e_w__t_e_m_p_l_a_t_e_-_b_a_s_e_d__c_o_m_p_l_e_x__n_u_m_b_e_r__l_i_b_r_a_r_y
  2009.  
  2010.           This release includes the template class _c_o_m_p_l_e_x, as
  2011.           described in in the draft C++ standard.  Single-precision
  2012.           complex numbers are _c_o_m_p_l_e_x<_f_l_o_a_t>, double-precision are
  2013.           _c_o_m_p_l_e_x<_d_o_u_b_l_e>, and quad precision are _c_o_m_p_l_e_x<_l_o_n_g
  2014.           _d_o_u_b_l_e>.  The template _c_o_m_p_l_e_x is declared in the header
  2015.           file _c_o_m_p_l_e_x._h.
  2016.  
  2017.           Note that this is a change from previous compiler releases:
  2018.           previous releases instead included a complex number class
  2019.           that was not a template, and that only supported double-
  2020.           precision
  2021.            complex numbers.
  2022.  
  2023.           If you are migrating code from an earlier compiler release,
  2024.           then you can either modify your code (by changing all
  2025.           instances of _c_o_m_p_l_e_x to _c_o_m_p_l_e_x<_d_o_u_b_l_e>) or else you can
  2026.           continue to use the non-template class.  You can select the
  2027.           non-template complex class by defining the macro
  2028.           __N_O_N__T_E_M_P_L_A_T_E__C_O_M_P_L_E_X before including the header _c_o_m_p_l_e_x._h.
  2029.  
  2030.           The template-based complex class is only supported on the
  2031.           n32/64 compilers.  If you are using the ucode (o32)
  2032.           compiler, then __N_O_N__T_E_M_P_L_A_T_E__C_O_M_P_L_E_X will be defined
  2033.           automatically.
  2034.  
  2035.           Regardless of whether you are using the newer template-based
  2036.           complex class or the older non-template class, the complex
  2037.           library is not automatically loaded by the C++ compiler.
  2038.  
  2039.  
  2040.  
  2041.  
  2042.  
  2043.  
  2044.  
  2045.  
  2046.  
  2047.  
  2048.  
  2049.                                      - 32 -
  2050.  
  2051.  
  2052.  
  2053.           You must explicitly provide a command-line option telling
  2054.           the compiler to link the complex library.  (This is expected
  2055.           to change in a future release.)  You must also include the
  2056.           math library, -_l_m.
  2057.  
  2058.           To use the newer, template-based complex library, include
  2059.           the options
  2060.  
  2061.               -lComplex -lm
  2062.  
  2063.           To use the older, non-template complex library, include the
  2064.           options
  2065.  
  2066.               -lcomplex -lm
  2067.  
  2068.  
  2069.  
  2070.           1.18  _R_o_g_u_e__W_a_v_e__T_o_o_l_s_._h_+_+
  2071.  
  2072.           Tools.h++ 7.03 is bundled with this release. The previous
  2073.           version of Tools.h++ is no longer supported.
  2074.  
  2075.  
  2076.           1.19  _K_n_o_w_n__P_r_o_b_l_e_m_s__a_n_d__W_o_r_k_a_r_o_u_n_d_s
  2077.  
  2078.           This section describes the known problems with the current
  2079.           release of the C++ product and how to work around them.
  2080.           Some of the descriptions are followed by a Silicon Graphics,
  2081.           Inc., bug report number in the form
  2082.           (Bug #xxxxx). Unless stated otherwise, the bugs described
  2083.           below affect the 64-bit and n32 compilation modes.
  2084.  
  2085.            +o The standard library as described in the draft standard
  2086.              is not yet completely implemented.
  2087.  
  2088.            +o The I/O library iostreams.h still uses the old naming
  2089.              convention and must be included as .h and is not in the
  2090.              std namespace.
  2091.  
  2092.            +o CC does not inline sqrt by default (Bug #439787).
  2093.  
  2094.              Unlike cc, the n32 and 64-bit C++ compiler does not by
  2095.              default use built-in operations to compute square roots,
  2096.              nor does it treat functions from the standard math
  2097.              library as having no side effects. The problem is that a
  2098.              strict application of the standard requires that many of
  2099.              these functions in fact have side effects under error
  2100.              conditions, such as a negative argument passed to the
  2101.              sqrt function.
  2102.  
  2103.              To force use of the square root operations for evaluating
  2104.  
  2105.  
  2106.  
  2107.  
  2108.  
  2109.  
  2110.  
  2111.  
  2112.  
  2113.  
  2114.  
  2115.                                      - 33 -
  2116.  
  2117.  
  2118.  
  2119.              the functions sqrt and sqrtf, use the commandline option
  2120.              -D__INLINE_INTRINSICS.  To improve performance of code
  2121.              using other functions in the standard math library use
  2122.              the option -D__MATH_HAS_NO_SIDE_EFFECTS.
  2123.  
  2124.  
  2125.            +o Exception runtime failures (Bug #405567).
  2126.  
  2127.              Runtime assertion errors will result if an exception is
  2128.              thrown as a result of reaching the per process file
  2129.              descriptor limit or if there is no more memory available.
  2130.              The default operator new does not throw an exception when
  2131.              allocation of requested storage fails.
  2132.  
  2133.            +o Under certain very rare circumstances, a compiler
  2134.              internal error results in the message "A goto outside a
  2135.              region cannot jump to a label inside a region."  This
  2136.              error occurs only when exceptions are enabled, and is
  2137.              known to occur only when a natural if-then-else is
  2138.              written with if's and goto's:  e.g.
  2139.  
  2140.                 if (n == 0) goto label1;
  2141.                 goto label2;
  2142.              label1:
  2143.                 ...
  2144.              label2:
  2145.                 ...
  2146.  
  2147.              If the source cannot be rewritten, then the program
  2148.              should be compiled with -LANG:exceptions=off.
  2149.  
  2150.            +o Another rare exception-related error can occur if a
  2151.              virtual destructor for a virtual base class is inline.
  2152.              This can produce an internal error with the message
  2153.              "Exception range label is null."  The workaround is to
  2154.              make the destructor non-inline.
  2155.  
  2156.            +o The use of -anach with -n32 is deprecated (Bug #514250)
  2157.  
  2158.              The following example (see the function proc_bad)
  2159.              illustrates a style of function definition (similar to
  2160.              the K&R mode in C) which was supported with the -anach
  2161.              flag in the ucode compilers for historical reasons. The
  2162.              C++ standard requires the user to write the function in a
  2163.              style consistent with the ANSI C style (see the function
  2164.              proc_good).
  2165.  
  2166.              With CC -32 -anach the code compiles and produces correct
  2167.              results (values of 123 and 123 get printed). With CC -n32
  2168.              -anach the code does compile, however it produces
  2169.              incorrect results (a value of 123, and 0 get printed).
  2170.  
  2171.  
  2172.  
  2173.  
  2174.  
  2175.  
  2176.  
  2177.  
  2178.  
  2179.  
  2180.  
  2181.                                      - 34 -
  2182.  
  2183.  
  2184.  
  2185.                    #include <stdio.h>
  2186.  
  2187.                    class C
  2188.                    {
  2189.                    public:
  2190.                      int v;
  2191.                      C() { v = 123; };
  2192.                      C(C& ob) { v = ob.v; };
  2193.                    };
  2194.  
  2195.                    int proc_good(C c) { return c.v; }
  2196.                    int proc_bad(c) C c; { return c.v; } // rewrite as proc_good
  2197.  
  2198.                    main()
  2199.                    {
  2200.                      C c;
  2201.                      printf("%d0, proc_good(c));
  2202.                      printf("%d0, proc_bad(c));
  2203.                    }
  2204.  
  2205.              We suggest that the function proc_bad  be rewritten as
  2206.              proc_good to conform to the C++ standard. Such a source
  2207.              transformation can even be done using a script.
  2208.  
  2209.            +o C/C++ internal error (Bug #480882).
  2210.              The C/C++ compilers reserve the charcaters 0x81 and 0x82.
  2211.              Usage of these characters might either cause the compiler
  2212.              to core dump or emit the following error:  Internal error
  2213.              loop: nested_source_line_modif: bad address
  2214.  
  2215.  
  2216.           1.20  _B_u_g_s__F_i_x_e_d__S_i_n_c_e__t_h_e__L_a_s_t__R_e_l_e_a_s_e
  2217.  
  2218.  
  2219.  
  2220.              +o Making a static/extern _l_o_c_a_l in a mp region was not
  2221.                implemented for MIPSpro 7.2.
  2222.  
  2223.                Consider the following example:  The variable _i
  2224.                declared as a _s_t_a_t_i_c _i_n_t is being made local in the
  2225.                parallel region.  The semantics of _l_o_c_a_l dictate that a
  2226.                local copy is made within each process and the local
  2227.                copy is initialized to -3.
  2228.  
  2229.                However, the call to _f() within the parallel region
  2230.                also refers to _i which should still get the value
  2231.                assigned to the _s_t_a_t_i_c _i_n_t ( i.e. 44).  This is indeed
  2232.                the observed behavior when _f() is not inlined. However,
  2233.                if _f() is inlined, the _i that it refers to gets a value
  2234.                of -3.
  2235.  
  2236.  
  2237.  
  2238.  
  2239.  
  2240.  
  2241.  
  2242.  
  2243.  
  2244.  
  2245.  
  2246.  
  2247.                                      - 35 -
  2248.  
  2249.  
  2250.  
  2251.                This has been fixed (Bug #437716).
  2252.  
  2253.  
  2254.              +o Internal error with exceptions and IPA
  2255.  
  2256.                Under rare circumstances (when exceptions are on and
  2257.                when compiling with -IPA and when certain other
  2258.                conditions apply) the compiler may generate an internal
  2259.                error. As a workaround we suggest with -IPA:clone=off,
  2260.                or if the code doesn't throw or catch or propogate
  2261.                exceptions, compiling with -LANG:exceptions=off.
  2262.  
  2263.                This has been fixed (Bug# 512292).
  2264.  
  2265.  
  2266.              +o Generating an assembly language file using -S can cause
  2267.                a coredump if extremely long names (such as those
  2268.                generated by C++ template functions) are involved. This
  2269.                has been fixed (Bug #707102).
  2270.  
  2271.  
  2272.              +o Under certain circumstances, code compiled -32 -O2
  2273.                would cause a Trace/BPT trap when executed. This has
  2274.                been fixed (Bug #532558)
  2275.  
  2276.  
  2277.  
  2278.  
  2279.  
  2280.  
  2281.  
  2282.  
  2283.  
  2284.  
  2285.  
  2286.  
  2287.  
  2288.  
  2289.  
  2290.  
  2291.  
  2292.  
  2293.  
  2294.  
  2295.  
  2296.  
  2297.  
  2298.  
  2299.  
  2300.  
  2301.  
  2302.  
  2303.  
  2304.  
  2305.  
  2306.  
  2307.  
  2308.  
  2309.  
  2310.